﻿Imports Biz
Imports DAL


''' <summary>
''' Clase de gestión de lógica de negocio para la entidad Familia
''' </summary>
''' <remarks></remarks>
Public Class GestorFamilia

    Private Shared _instance As GestorFamilia
    Private Shared _semaforo As New Object

    Private _DALFamilia As DALFamilia

    ''' <summary>
    ''' Obtiene un objeto Familia.
    ''' </summary>
    ''' <param name="oFamilia">Objeto Departamento con la propiedad Dep_Codigo seteada
    ''' con el valor del Departamento a buscar.</param>
    ''' <returns>Objeto cFamilia con datos obtenidos desde la base de datos.</returns>
    ''' <remarks></remarks>
    Public Function Buscar(ByVal oFamilia As cFamilia) As cFamilia

        Return _DALFamilia.Sel(oFamilia)

    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de acceso a datos DAL para consultar la lista de Familias
    ''' </summary>
    ''' <returns>Colección de objetos de tipo cFamilia</returns>
    ''' <remarks></remarks>
    Public Function Consultar() As Collection

        Return _DALFamilia.SelectAll

    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de acceso a datos DAL para consultar la lista de Patentes asignadas a una Familia
    ''' </summary>
    ''' <param name="oFamilia">Objeto de tipo cFamilia con la idnetificación de la Familia a consultar</param>
    ''' <returns>Colección de objetos de tipo cPatente</returns>
    ''' <remarks></remarks>
    Public Function ConsultarPatentes(oFamilia As cFamilia) As Collection

        Return _DALFamilia.Select_Patentes(oFamilia.Fam_Codigo)

    End Function

    ''' <summary>
    ''' Da de alta un nuevo Departamento.
    ''' </summary>
    ''' <param name="oFamilia">Objeto cFamilia con los datos del Departamento a dar
    '''  de alta.</param>
    ''' <returns>True o False indicando el exito de la operación.</returns>
    ''' <remarks></remarks>
    Public Function Ingresar(ByVal oFamilia As cFamilia) As Boolean

        Return _DALFamilia.Insert(oFamilia)

    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de acceso a datos DAL para eliminar una Familia de asegurables
    ''' </summary>
    ''' <param name="oFamilia">Objeto de tipo cFamilia con la identificación del registro a eliminar</param>
    ''' <returns>Valor booleano que indica el resultado de la operación</returns>
    ''' <remarks></remarks>
    Public Function Eliminar(ByVal oFamilia As cFamilia) As Boolean

        Return _DALFamilia.Delete(oFamilia)

    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de acceso a datos DAL para actualizar una Familia de asegurables
    ''' </summary>
    ''' <param name="oFamilia">Objeto de tipo cFamilia con la identificación del objeto a buscar</param>
    ''' <returns>Valor booleano que indica el resultado de la operación</returns>
    ''' <remarks></remarks>
    Public Function Editar(ByVal oFamilia As cFamilia) As Boolean

        Return _DALFamilia.Update(oFamilia)

    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de aceso a datos DAL para asignar una Patente a una Familia
    ''' </summary>
    ''' <param name="oFamilia">Objeto de tipo cFamilia con la identificación de la Familia que tendrá asignada la Patente</param>
    ''' <param name="oPatente">Objeto de tipo cPatente con la identificación de la Patente que será asignada</param>
    ''' <returns>Valor booleano que indica el resultado de la operación</returns>
    ''' <remarks></remarks>
    Public Function Ingresar_Patente(oFamilia As cFamilia, ByVal oPatente As cPatente) As Boolean
        Return _DALFamilia.Insert_Patente(oFamilia, oPatente)
    End Function

    ''' <summary>
    ''' Realiza una llamada a la capa de aceso a datos DAL para desasignar una Patente a una Familia
    ''' </summary>
    ''' <param name="oFamilia">Objeto de tipo cFamilia con la identificación de la Familia que tiene la Patente asignada</param>
    ''' <param name="oPatente">Objeto de tipo cPatente con la identificación de la Patente que será desasignada</param>
    ''' <returns>Valor booleano que indica el resultado de la operación</returns>
    ''' <remarks></remarks>
    Public Function Remover_Patente(oFamilia As cFamilia, oPatente As cPatente) As Boolean
        Return _DALFamilia.Delete_Patente(oFamilia, oPatente)
    End Function

    ''' <summary>
    ''' Método estático Instance para exponer una única instancia de la clase GestsorFamilia
    ''' </summary>
    ''' <returns>Unica instancia de la clase GestsorFamilia</returns>
    ''' <remarks></remarks>
    Public Shared Function Instance() As GestorFamilia
        If _instance Is Nothing Then
            SyncLock (_semaforo)
                If _instance Is Nothing Then
                    _instance = New GestorFamilia
                End If
            End SyncLock
        End If

        Return _instance
    End Function

    Private Sub New()
        _DALFamilia = DALFamilia.Instance
    End Sub

End Class
